[pull] main from MetaMask:main#576
Merged
Merged
Conversation
…er is shown (#26835) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This PR fixes input layout by applying **conditional lineHeight** on the component-library **Input** component: when the input is empty (placeholder visible), `lineHeight: 0` is applied to avoid extra vertical space; when the input has a value, lineHeight is omitted so typography renders normally. **Reason for change:** Empty TextInputs can show inconsistent vertical alignment or extra space due to default line height. Applying `lineHeight: 0` only when the placeholder is visible keeps the cursor/placeholder aligned without affecting filled-in text. **What changed:** 1. **Input component** (`app/component-library/components/Form/TextField/foundation/Input/`) - **Input.tsx** - Supports controlled and uncontrolled usage: accepts `value`, `defaultValue`, and `onChangeText` (forwarded from TextInputProps). - Derives `isPlaceholderVisible` from current value (`currentValue === '' || currentValue == null`); uses internal state for uncontrolled inputs and syncs with `defaultValue` via `useEffect`. - Passes `isPlaceholderVisible` into the style sheet and wires `onChangeText` so internal state stays in sync when uncontrolled. - **Input.types.ts** - Extends `InputStyleSheetVars` with `isPlaceholderVisible: boolean`. - **Input.styles.ts** - Reads `isPlaceholderVisible` from vars and applies `...(isPlaceholderVisible && { lineHeight: 0 })` to the base text style so lineHeight is only set when the placeholder is visible. 2. **Input tests** (`Input.test.tsx`) - Migrated from Enzyme (shallow) to React Native Testing Library with `ThemeContext` for theme. - Removed snapshot test; added behavior-focused tests: render with testID, TextVariant typography, disabled/state-styles-disabled, **lineHeight 0 when value is empty**, **lineHeight omitted when value is non-empty**, and `onChangeText` callback. - Deleted `__snapshots__/Input.test.tsx.snap`. No other app or Storybook code is changed; only the Input foundation and its tests are updated. ## **Changelog** CHANGELOG entry: Fixed the occasional Input placeholder misalignments ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/DSYS-499 ## **Manual testing steps** ```gherkin Feature: Input conditional lineHeight Scenario: Lint and type check pass Given the branch is checked out When the author runs yarn lint and yarn lint:tsc Then both complete without errors Scenario: Input unit tests pass Given the branch is checked out When the author runs yarn jest app/component-library/components/Form/TextField/foundation/Input/Input.test.tsx Then all tests pass Scenario: Empty input has compact lineHeight Given the app is running with a screen that uses TextField/Input When the input is empty (placeholder visible) Then the input does not show extra vertical space from line height Scenario: Filled input uses normal typography When the user types in the input Then the text uses normal line height and alignment ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> iOS https://github.com/user-attachments/assets/525f2ed9-dbf1-4fea-9f9c-0e6564305dcf Android - before trigger   Android - after trigger   ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches a shared `Input` foundation component used across many screens, so styling regressions (especially text/cursor vertical alignment on iOS) could have broad UI impact. Logic is small and well-covered by updated unit tests and snapshot updates. > > **Overview** > Fixes `Input` layout by deriving placeholder visibility from `value` + `placeholder` and applying **iOS-only** `lineHeight: 0` when the placeholder is visible. > > Updates `Input` to pass `value`, `placeholder`, and `onChangeText` through to `TextInput`, tightens focus/blur event typing, expands `InputStyleSheetVars` accordingly, and migrates `Input` tests from Enzyme snapshots to React Native Testing Library behavior tests. Downstream Jest snapshots are updated to reflect the new conditional `lineHeight` styling, and call sites using the stylesheet vars (e.g. SRP input) are adjusted to provide `value`/`placeholder`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 66a78f0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…iling expo dev builds (#27032) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Align iOS development provisioning profile name to be `development-metamask` and remove the QA builds from expo dev builds pipeline in Bitrise. These changes resolves the issue where `build_ios_devbuild` failed from an invalid certification. Under the hood, we've rolled and applied a new development cert and provisioning profile Successful build - https://app.bitrise.io/app/be69d4368ee7e86d/pipelines/ae66cb02-de4b-4e86-8295-e4906f20ae9a ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MCWP-381 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Moderate risk because it changes iOS code-signing configuration and CI pipeline composition; misconfiguration could break dev builds in Bitrise/Xcode but does not affect runtime app behavior. > > **Overview** > **Fixes iOS dev build signing and reduces Expo dev CI workload.** > > Updates the iOS Xcode project Debug configuration to use the `development-metamask` provisioning profile instead of the previous `match Development io.metamask.MetaMask` specifier. > > Adjusts Bitrise `expo_dev_pipeline` to run a new `create_build_dev_expo` stage that builds only dev/simulator artifacts, dropping the QA build workflows that were previously included in the Expo dev pipeline. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit a54b929. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…6850) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This PR refactors the **Perps Market List** screen so that search is **always visible** as an inline search bar below the header, instead of toggling between a compact header and a full-screen search header. **Reason for change:** The previous UX required tapping a search icon to show a dedicated search header (`PerpsMarketListHeader`), then toggling back to see the list header. Letting the search bar stay visible simplifies the flow: users can filter immediately, and the balance actions and filter bar remain visible at all times. **What changed:** 1. **PerpsMarketListView** (`app/components/UI/Perps/Views/PerpsMarketListView/`) - **PerpsMarketListView.tsx**: Removed conditional header (no more switch between `PerpsMarketListHeader` when searching and `HeaderCompactStandard` when not). Always render `HeaderCompactStandard` (no search icon). Added a persistent `TextFieldSearch` in the content area in a new `searchBarRow`. Balance actions and filter bar are always shown (no “hide when search visible” logic). Empty search state now depends on `searchQuery.trim()` instead of `isSearchVisible`. Removed `handleSearchToggle`, `preSearchFilterRef`, and use of `defaultSearchVisible` / search visibility from the hook. - **PerpsMarketListView.types.ts**: Removed `defaultSearchVisible` prop and updated `showBalanceActions` JSDoc (no longer “only when search not visible”). - **PerpsMarketListView.styles.ts**: Added `searchBarRow` style for the inline search bar. 2. **usePerpsMarketListView** (`app/components/UI/Perps/hooks/usePerpsMarketListView.ts`) - Removed search visibility state: `defaultSearchVisible`, `isSearchVisible`, `toggleSearchVisibility`, and `clearSearch`. Hook now only exposes `searchQuery` and `setSearchQuery` for the always-visible search bar. 3. **PerpsHomeView** (`app/components/UI/Perps/Views/PerpsHomeView/PerpsHomeView.tsx`) - When navigating to the market list (e.g. from home search), no longer passes `defaultSearchVisible: true`. 4. **Navigation and types** - **routes/index.tsx**: Removed `defaultSearchVisible` from initial params for the embedded `PerpsMarketListView` screen. - **types/navigation.ts**: Removed `defaultSearchVisible` from `PerpsNavigationParamList`. 5. **TextFieldSearch** (`app/component-library/components/Form/TextFieldSearch/TextFieldSearch.types.ts`) - `clearButtonProps` type changed from `ButtonIconProps` to `Partial<ButtonIconProps>` so callers can pass a subset of props. 6. **Tests and E2E** - **PerpsMarketListView.test.tsx**, **PerpsMarketListView.view.test.tsx**, **usePerpsMarketListView.test.ts**: Updated for the new behavior (no search visibility/toggle; search bar always present). - **PerpsHomeView.test.tsx**: Removed assertions or setup related to `defaultSearchVisible`. - **tests/page-objects/Perps/PerpsMarketListView.ts**: Replaced `searchToggleButton` / `tapSearchToggleButton()` with `searchBar`; kept `tapSearchClearButton()` and clear button usage. No new screens or routes; only the Perps market list UX and related types/tests are updated. ## **Changelog** Improves Perps market list UX by making search always visible as an inline bar instead of a toggleable full-screen search header. CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/DSYS-500 ## **Manual testing steps** ```gherkin Feature: Perps Market List always-visible search Scenario: Lint and type check pass Given the branch is checked out When the author runs yarn lint and yarn lint:tsc Then both complete without errors Scenario: Perps Market List unit tests pass Given the branch is checked out When the author runs yarn jest app/components/UI/Perps/ Then all tests pass Scenario: Search bar always visible on Market List Given the app is running and Perps is available When the user opens the Perps Market List screen Then the search bar is visible below the header (no search icon to tap) And balance actions and filter bar are visible Scenario: Search and clear work When the user types in the search bar Then the list filters by symbol/name And when the user taps clear, the query is cleared and full list shows ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> Search was hidden by default; user tapped a search icon to show a full-screen search header, then toggled back to see the list header. ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/e1923879-4b66-4daa-bb72-bc5588a45d1c ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Medium risk because it changes Perps market list UI flow and filtering semantics (search now always active and category filtering applies while searching), which could affect navigation params and market visibility. > > **Overview** > **Perps Market List search UX is refactored to be always visible.** `PerpsMarketListView` no longer toggles between a normal header and a dedicated search header; it always renders `HeaderCompactStandard` and shows an inline `TextFieldSearch` row under the header. > > Search state is simplified across the stack: `usePerpsSearch` and `usePerpsMarketListView` drop `isSearchVisible`/toggle APIs and the `defaultSearchVisible` param is removed from view props, navigation types, and navigation calls (including from `PerpsHomeView`). Category filtering now applies *in addition to* search results, and the empty-search state is shown only when `searchQuery` is non-empty. > > Tests and E2E page objects are updated to assert the persistent search bar and remove search-toggle behavior, and `TextFieldSearch` relaxes `clearButtonProps` to `Partial<ButtonIconProps>` for easier customization. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 998a969. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
Refactors the Explore page to use the shared `HeaderRoot` component and
`SafeAreaView` from `react-native-safe-area-context`, aligning with
patterns used elsewhere (e.g. Settings / General Settings).
1. **Reason for the change:** The Explore screen used a custom header
(title + manual top inset) and was not wrapped in SafeAreaView, which
was inconsistent with other screens and made safe-area handling fragile.
2. **Improvement:** The Explore feed is now wrapped in `SafeAreaView`
with `edges={{ bottom: 'additive' }}`, and the title area uses inline
`HeaderRoot` with `includesTopInset`. The stack continues to use
`headerShown: false`. The search bar and browser button remain in the
content area below the header. No style overrides are applied to
`HeaderRoot`.
**Files changed:**
- `TrendingView.tsx`: SafeAreaView wrapper, HeaderRoot for title,
testIDs for header and safe area.
- `TrendingView.testIds.ts`: Added `EXPLORE_HEADER_ROOT` and
`EXPLORE_SAFE_AREA`.
- `TrendingView.test.tsx`: Unit tests for SafeAreaView and HeaderRoot
presence and Explore title.
- `TrendingView.view.test.tsx`: Component-view test that the Explore
screen renders with HeaderRoot and SafeAreaView.
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: null
## **Related issues**
Fixes: https://consensyssoftware.atlassian.net/browse/DSYS-505
## **Manual testing steps**
```gherkin
Feature: Explore page header and safe area
Scenario: user opens Explore tab and sees consistent header and layout
Given the app is open and user is on any tab
When user taps the Explore tab in the bottom navigation
Then the Explore screen shows the "Explore" title in the header below the status bar
And the search bar and browser/tabs button appear below the header
And content (e.g. Trending tokens, Quick actions) scrolls correctly and respects safe areas (no overlap with tab bar)
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
https://github.com/user-attachments/assets/1e7f49ab-bc74-4590-a944-2234781c3374
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Low risk UI/layout refactor that mainly affects safe-area handling and
header rendering on the Explore (Trending) screen. Main potential
regression is visual spacing or missing loading indicator behavior
during refresh.
>
> **Overview**
> Refactors the Explore (Trending) screen to wrap content in
`SafeAreaView` (with bottom additive edges) and replace the custom
title/inset header with the shared `HeaderRoot`.
>
> Adds new selector IDs (`EXPLORE_SAFE_AREA`, `EXPLORE_HEADER_ROOT`) and
updates/extends unit and component-view tests to assert the new
safe-area wrapper, header root, and title rendering. Removes the
per-section loading-state tracker/`ActivityIndicator` wiring by passing
a no-op loading callback to `Section`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1e06a06. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…6553) ## **Description** Adds MYX Finance as a second perpetuals provider alongside HyperLiquid, covering **infrastructure and validated public reads**. Auth-dependent operations (positions, orders, writes) are deferred to a follow-up PR. Key changes: - **MYX provider**: market data, prices, candles (REST + WebSocket), price streams — validated on mainnet and testnet via CDP - **Provider + network switching UI** (PerpsProviderSelector): combined provider/network sheet, testnet badge, header indicators - **Composite cache keys** (`provider:network`) preventing stale data across switches - **MYX mainnet enabled** (`MYX_TESTNET_ONLY=false`), env vars for MYX credentials - **MYXClientService + MYXWalletService**: full client/wallet service implementations with auth scaffolding - **Connection stability**: debounced Redux subscriber reconnect + poll loop to prevent `CLIENT_REINITIALIZING` error on rapid provider+network switch - **Bug fixes**: HyperLiquid testnet meta fetch, controller preloader race condition, stream manager provider-aware cache invalidation **Scope boundary:** Auth-dependent reads (positions, orders, account state) have scaffolding present but are **not yet validated** — no MYX reference implementation exists to validate against. All write paths are untouched. Authenticated operations are the next PR. ## **Changelog** CHANGELOG entry: Added MYX Finance as a second perpetuals provider with provider+network switching UI and validated market data ## **Related issues** Fixes: - TAT-2471: Feature flag integration - TAT-2472: Provider selector UI - TAT-2531: Provider+network switching logic - TAT-2473: Market selector logic on provider switch - TAT-2474: MYX price data on chart (candles REST+WS) - TAT-2475: MYX stats data (funding, OI, volume) - TAT-2580: MYX markets list - TAT-2524: Cache invalidation on provider switch ## **Manual testing steps** ```gherkin Feature: MYX provider switching Scenario: Switch from HyperLiquid to MYX (mainnet) Given user is on the Perps home screen with HyperLiquid selected When user taps the provider selector badge Then a bottom sheet appears with provider and network options When user selects MYX (mainnet) Then market list updates to show MYX markets (WBTC, MYX, WBNB) And price data and candles load from MYX API Scenario: Switch to MYX testnet Given user is on MYX mainnet When user selects MYX + testnet in the provider selector Then testnet badge appears on the selector And market list updates to show testnet markets (KNY) And prices reflect testnet data Scenario: Rapid provider + network switch (regression) Given user is on HyperLiquid mainnet When user switches to MYX AND toggles testnet in quick succession Then no "Couldn't connect to perps" error screen appears And the app connects directly to MYX testnet Scenario: Switch back to HyperLiquid Given user is on MYX When user selects HyperLiquid Then market list updates to HyperLiquid markets And stale MYX data is cleared ``` ## **Screenshots/Recordings** ### **Before** Single provider (HyperLiquid only), no selector UI. ### **After** Provider selector badge + bottom sheet with MYX/HL × mainnet/testnet. Rapid switching works without error. https://github.com/user-attachments/assets/af5b5098-4c05-4a51-92ef-f770aa545917 ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **High Risk** > Touches core perps provider initialization, caching, and connection/reconnect logic; regressions could break market data display or cause stale/incorrect data during rapid provider/network switches. > > **Overview** > Adds a **unified provider + network selector** for Perps (mainnet/testnet options per provider, including `aggregated`) and updates header/badge UI to surface testnet state; selection now coordinates provider switching + testnet toggling with updated test IDs and new view/sheet tests. > > Refactors Perps preloading and streaming to be **provider/network aware** by moving controller caches to `cachedMarketDataByProvider` / `cachedUserDataByProvider` keyed as `provider:network`, adding `getCachedMarketDataForActiveProvider()` / `getCachedUserDataForActiveProvider()` helpers, and updating hooks/stream manager to rely on those helpers and invalidate caches on provider *or network* changes. > > Enables broader MYX support by turning off `MYX_TESTNET_ONLY`, adding env placeholders for MYX credentials, updating MYX endpoints/chain IDs/price parsing, and hardening connection stability with debounced reconnections plus a poll to wait out concurrent controller reinitialization before health-check pings. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 881ce5c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Nick Gambino <nicholas.gambino@consensys.net>
## **Description**
Any `ButtonIcon` inside of a header should be size `md`.
This PR standardizes header back button icon sizing from large to medium
across navigation surfaces that use `ButtonIcon` (both
design-system-react-native and component-library variants), with a
targeted Security & Privacy override to keep behavior consistent.
## **Changelog**
CHANGELOG entry: null
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: Header back button icon sizing consistency
Scenario: user opens screens with header back buttons
Given the app is launched and user can navigate to Settings, Assets, Browser, Perps, Ramp, and Card flows
When user opens screens that render back-arrow ButtonIcon controls in the header
Then back-arrow ButtonIcon controls render at medium size consistently
```
## **Screenshots/Recordings**
### **Before**
Not collected for every header.
### **After**
Not collected for every header.
Given the low-risk nature of this change and confidence from direct
code-level verification, I am forgoing exhaustive visual regression
screenshots for every navbar.
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Low risk visual-only change that adjusts back button sizing and
snapshot expectations without altering navigation behavior or business
logic.
>
> **Overview**
> Standardizes header back-arrow `ButtonIcon` size from `Lg` to `Md`
across common navigation surfaces (navbar headers, onboarding/card KYC
screens, perps order book, ramp region selector, browser tabs,
token/asset inline headers, confirmations, and bottom sheet headers).
>
> Updates affected Jest snapshots to match the new rendered touch
target/icon dimensions.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ff40b4d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )